#include <iostream>
#include <memory>

class Test
{
public:
    Test()
    {
        std::cout<<"构造函数"<<std::endl;
    }
    ~Test()
    {
        std::cout<<"析构函数"<<std::endl;
    }

    void show()
    {
        std::cout<< "Test" <<std::endl;
    }
};

void func(Test *ptr)
{
    //裸指针和智能指针不要混用
    std::unique_ptr<Test> p(ptr);
}

int main()
{
    //当智能指针对象释放时,会自动释放托管的内存
    // std::unique_ptr<Test> p(new Test);

    // std::unique_ptr<Test> p2(p);//不允许拷贝构造

    // std::unique_ptr<Test> p2;
    // p2 = p;//不允许赋值运算

    // std::unique_ptr<Test> p2 = new Test;//禁止隐式转换


    // p->show();
    // *p 

    // //不要去拿裸指针
    // Test *tp = p.get();
    // delete tp;

    // Test *ptr = new Test;
    // func(ptr);
    // delete ptr;

    std::unique_ptr<Test> p = std::make_unique<Test>();//进行堆上空间申请 构造了一个对象

    return 0;
}